package cn.hy.async;

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

/**
 * 1.调用方法和异步方法在同一个类中，会导致Async失效。
 * 2.异步方法使用了static进行修饰，会导致Async失效。
 */
@Component
public class AsyncComponent {
    @Async
    public void async(String str) {
        System.out.println(Thread.currentThread().getName() + "输入的内容是" + str + "，异步任务正在休眠5秒..");
        try {
            TimeUnit.SECONDS.sleep(5);
        } catch (InterruptedException e) {
            System.out.println("休眠失败");
        }
        System.out.println("输入的内容是" + str + ",异步任务执行结束");
    }


    @Async("asyncConfig")
    public void selfAsync() {
        System.out.println("我是自定义异步线程，线程池名称:" + Thread.currentThread().getName());
        try {
            TimeUnit.SECONDS.sleep(5);
        } catch (InterruptedException e) {
            System.out.println("休眠失败");
        }
        System.out.println("自定义异步线程休眠结束");
    }


    public void sync(String str) {
        System.out.println("输入的内容是" + str + ",异步任务执行结束");
    }

}
